package clienteEmpresaTest

import org.scalatest.Suite
import org.junit.runner.RunWith
import org.scalatest.junit.JUnitRunner
import comunicaciones.LlamadaLocal
import comunicaciones.LlamadaLargaDistancia
import comunicaciones.MensajeDeTexto
import cliente.empresa.Cliente
import cliente.empresa.Empresa
import planes.SinPlan
import java.util.Date

@RunWith(classOf[JUnitRunner])
class TestEmpresa extends Suite{
  
  
  
  def testClienteQueMasHabloEnFebrero(){
    
    var call1 =  (new LlamadaLargaDistancia(1,"Quilmes","Ezpeleta",420)) 
    call1.fechaDeRealizacion = new Date(2013,2,2)
    var call2 =  (new LlamadaLargaDistancia(2,"Quilmes","Wilde",240))  
    call2.fechaDeRealizacion = new Date(2013,2,2)
    var call3 =  (new LlamadaLocal(3,360))
    call3.fechaDeRealizacion = new Date(2013,2,3) 
    var llamadas = List(call1, call2, call3)
    var client = new Cliente("Cliente 1", llamadas) //client1 con 3 llamadas de feb
    
    var call4 =  (new LlamadaLargaDistancia(2,"Quilmes","Wilde",60))  
    call4.fechaDeRealizacion = new Date(2013,2,2)
    var call5 =  (new LlamadaLocal(3,60))
    call5.fechaDeRealizacion = new Date(2013,2,3) 
    var llamadas2 = List(call4, call5)
    var client2 = new Cliente("Cliente 2", llamadas2) //client2 con 2 llamadas de feb
    
    var clientes = List(client, client2)
    
    var empresa = new Empresa(clientes) // empresa
    empresa.addClientes(client)
    empresa.addClientes(client2)
    
   
    assert(empresa.clienteQueMasHablo(2) === client.nombre)
  }
  
  def testClienteConLaMayorFacturaEnFebrero(){
    
    var call1 =  (new LlamadaLargaDistancia(1,"Quilmes","Wilde",420)) 
    call1.fechaDeRealizacion = new Date(2013,2,2)
    var call2 =  (new LlamadaLargaDistancia(2,"Quilmes","Wilde",420))  
    call2.fechaDeRealizacion = new Date(2013,2,2)
    var call3 =  (new LlamadaLocal(3,420))
    call3.fechaDeRealizacion = new Date(2013,2,3) 
    var llamadas = List(call1, call2, call3)
    var client = new Cliente("Cliente 1", llamadas) //client1 con 3 llamadas de feb
    
    var call5 =  (new LlamadaLocal(3,60))
    call5.fechaDeRealizacion = new Date(2013,2,3) 
    var llamadas2 = List(call5)
    var client2 = new Cliente("Cliente 2", llamadas2) //client2 con 2 llamadas de feb
    
    var clientes = List(client, client2)
    
    var empresa = new Empresa(clientes) // empresa
    
    assert(empresa.clienteConLaMayorFactura(2) === client.nombre)
  }
  
  def testClienteConMasLlamadasLargasEnFebrero(){
    
    var call1 =  (new LlamadaLargaDistancia(1,"Quilmes","Wilde",420)) 
    call1.fechaDeRealizacion = new Date(2013,2,2)
    var call2 =  (new LlamadaLargaDistancia(2,"Quilmes","Wilde",420))  
    call2.fechaDeRealizacion = new Date(2013,2,2)
    var call3 =  (new LlamadaLocal(3,420))
    call3.fechaDeRealizacion = new Date(2013,3,3) 
    var llamadas = List(call1, call2, call3)
    var client = new Cliente("Cliente 1", llamadas) //client1 con 3 llamadas de feb
    
    var call5 =  (new LlamadaLocal(3,60))
    call5.fechaDeRealizacion = new Date(2013,2,3) 
    var llamadas2 = List(call5)
    var client2 = new Cliente("Cliente 2", llamadas2) //client2 con 1 llamadas de feb
    
    var clientes = List(client, client2)
    
    var empresa = new Empresa(clientes) // empresa
    
    assert(empresa.clienteConMasLlamadasLargas(2) === client.nombre)
  }
  
  def testElegirPlanAUnaPersonaDondeLeConvieneCiudadesAmigas(){
     var empresa = new Empresa(null)
     var call1 =  (new LlamadaLargaDistancia(1,"Quilmes","Wilde",420))
     call1.fechaDeRealizacion = new Date(2013,2,2)
     var call2 =  (new LlamadaLargaDistancia(2,"Quilmes","Wilde",420))
     call2.fechaDeRealizacion = new Date(2013,2,2)
     var call3 =  (new LlamadaLargaDistancia(3,"Quilmes","Wilde",420))
     call3.fechaDeRealizacion = new Date(2013,2,2)
     var client = new Cliente("", List(call1,call2,call3))
     var plan = empresa.elegirElMejorPlanPara(client,1,2,3,List(4,5,6,7,8),"Wilde")
     assert("Plan CiudadesAmigas" == plan)
 
  }
  
  def testElegirPlanAUnaPersonaDondeLeConvieneNumerosAmigos(){
     var empresa = new Empresa(null)
     var call1 =  (new LlamadaLargaDistancia(1,"Quilmes","Wilde",420))
     call1.fechaDeRealizacion = new Date(2013,2,2)
     var call2 =  (new LlamadaLargaDistancia(1,"Quilmes","Wilde",420))
     call2.fechaDeRealizacion = new Date(2013,2,2)
     var call3 =  (new LlamadaLargaDistancia(3,"Quilmes","Bernal",60))
     call3.fechaDeRealizacion = new Date(2013,2,2)
     var client = new Cliente("", List(call1,call2,call3))
     var plan = empresa.elegirElMejorPlanPara(client,1,2,3,List(1,5,6,7,8),"Ezpeleta")
     assert("Plan NumerosAmigos" == plan)
 
  }
  
  def testElegirPlanAUnaPersonaDondeLeConvieneHablateTodo(){
     var empresa = new Empresa(null)
     var call1 =  (new LlamadaLocal(1,420))
     call1.fechaDeRealizacion = new Date(2013,2,2)
     call1.fechaDeRealizacion.setDate(6)
     var call2 =  (new LlamadaLocal(1,420))
     call2.fechaDeRealizacion = new Date(2013,2,2)
     call2.fechaDeRealizacion.setDate(6)
     var call3 =  (new LlamadaLocal(1,420))
     call3.fechaDeRealizacion = new Date(2013,2,2)
     call3.fechaDeRealizacion.setDate(7)
     var client = new Cliente("", List(call1,call2,call3))
     var plan = empresa.elegirElMejorPlanPara(client,1,2,3,List(4,5,6,7,8),"Wilde")
     assert("Plan HablateTodo" == plan)
 
  }

}